/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package JavaDictDBModel;

import java.util.*;

/**
 *
 * @author Christianto
 */
public class DBModel {
    private Map<String, ArrayList<String>> kamus;
    private DBParser baca;
    private boolean balik;
    
    /**
     * Konstruktor untuk kelas DBModul
     * @param asal kode bahasa awal
     * @param sasar kode bahasa tujuan
     */
    public DBModel(int asal, int sasar) {
        baca = new DBParser(asal,sasar);
        kamus = new TreeMap<String, ArrayList<String>>();
        balik = (asal > sasar);

        ArrayList<String> dapat = baca.next();        
        while (!baca.isEOF()) {
            
            if (asal < sasar) {
                String kunci = dapat.get(0).substring(0,dapat.get(0).indexOf("(")-1);
                ArrayList<String> tambah = new ArrayList<String>();
                tambah.add(dapat.get(1));
                kamus.put(kunci,tambah);
                System.gc();    
            } else {
                String kunci = dapat.get(1).substring(0,dapat.get(1).indexOf("(")-1);                
                ArrayList<String> tambah = new ArrayList<String>();
                tambah.add(dapat.get(0));
                kamus.put(kunci,tambah);
                System.gc();
                          
            }
            dapat = baca.next();
        }
    }
    
    /**
     * menambahkan terjemahan dari kunci (arti) beserta tipenya ke dalam kamus
     * dan menuliskannya ke file
     * @param kunci sebuah string
     * @param tipe1 sebuah string
     * @param arti sebuah string
     * @param tipe2 sebuah string
     * 
     */
    
    public void DBInsert(String kunci, String tipe1, String arti, String tipe2) {
        String hasil = arti+" ("+tipe2+")";
        ArrayList<String> tambah = new ArrayList<String>();
        tambah.add(hasil);
        kamus.put(kunci, tambah);
        System.gc();
        
        ArrayList<String> masuk = new ArrayList<String>();
        if (!balik) {
            masuk.add(kunci+" ("+tipe1+")");
            masuk.add(hasil);
        } else {
            masuk.add(hasil);
            masuk.add(kunci+" ("+tipe1+")");
        }
        baca.add(masuk);

    }
    /**
     * Mencari suatu string ke database
     * @param kunci sebuah string
     * @return terjemahan dari kunci jika datanya ditemukan pada kamus,
     *         atau null jika data tidak ditemukan.
     */
    public ArrayList<String> DBSearch(String kunci) {
        return kamus.get(kunci);
    }
    
    /**
     * Mengecek apabila string ada di dalam database atau tidak
     * @param kunci sebuah string
     * @return true jika kunci ditemukan pada kamus 
     */
    
    public boolean isValueinDB(String kunci) {
        return kamus.containsKey(kunci);
    }
    
    /**
     * Mengembalikan seluruh isi kamus
     * @return seluruh kamus dalam strukturnya 
     */
    public SortedMap<String, ArrayList<String>> GetAll() {
        SortedMap<String, ArrayList<String>> urut = new TreeMap<String, ArrayList<String>>();
        urut.putAll(kamus);
        return urut;
    }
}
